package naga.x.platform2.channel.iapppay.support;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;

import naga.x.platform2.app.model.GameServer;
import naga.x.platform2.app.model.Recharge;
import naga.x.platform2.app.model.RechargeTemplate;
import naga.x.platform2.app.support.RechargeSupport;
import naga.x.platform2.channel.iapppay.support.config.IAppPayConfig;
import naga.x.platform2.utils.UUID;

@Component
public class PaySupport {

//	参数名称	参数含义	数据类型	是否可选	参数说明
//	appid	应用编号	String(20)	必填	平台分配的应用编号
//	waresid	商品编号	Integer	必填	应用中的商品编号
//	waresname	商品名称	String(32)	可选	商品名称，对于消费型_应用传入价格的计费方式有效，如果不传则展示后台设置的商品名称
//	cporderid	商户订单号	String(64)	必填	商户生成的订单号，需要保证系统唯一
//	price	支付金额	Float(6,2)	可选	支付金额，对于消费型_应用传入价格的计费方式有效，其它计费方式不需要传入本参数
//	currency	货币类型	String(32)	必填	货币类型以及单位：
//	RMB – 人民币（单位：元）
//	appuserid	用户在商户应用的唯一标识	String(32)	必填	用户在商户应用的唯一标识，建议为用户帐号。对于游戏，需要区分到不同区服，#号分隔；
//	比如游戏帐号abc在01区，则传入“abc#01”
//	cpprivateinfo	商户私有信息	String(64)	可选	商户私有信息，支付完成后发送支付结果通知时会透传给商户
//	notifyurl	支付结果通知地址	String(128)	可选	商户服务端接收支付结果通知的地址
//	Sign	对transdata的签名数据		必填	对transdata的签名数据
//	Signtype	签名算法类型		必填	签名算法类型，目前仅支持RSA
	
//	@Autowired
//	private IAppPayConfig config;
	@Autowired
	private RechargeSupport support;
	
	// 构造支付订单数据
	public JSONObject makeOrderTransdata(BaseIAppPayConfig config, GameServer gameServer, long playerId, RechargeTemplate product) {
		JSONObject json = new JSONObject(true);
		json.put("appid", config.getAppId());
		json.put("waresid", config.getGoodsId(product.getId()));
		json.put("waresname", product.getName());
		json.put("cporderid", UUID.randomUUID().toString());
		json.put("price", product.getPrice());
		json.put("currency", "RMB");
		json.put("appuserid", playerId + "#" + gameServer.getId());
		// 服务器id#玩家id#充值id
		json.put("cpprivateinfo", gameServer.getId() + "#" + playerId + "#" + product.getId());
		json.put("notifyurl", config.getPayCallbackUrl());
		return json;
	}
	
//	参数名称	参数含义	数据类型	是否可选	参数说明
//	tid	交易流水号	String	必填	向收银台服务端下单获取的交易流水号（transid）
//	app	应用编号	String	必填	商户在收银台注册的应用编号。可在商户自服务平台查询
//	url_r	URL地址	String	必填	用户支付完成后的网页端跳转地址。带有支付结果通知数据。最大长度512
//	url_h	URL地址	String	必填	用户放弃支付后网页端跳转地址。最大长度512
	// 构造客户端支付跳转页面所需数据
	public JSONObject makeClientPayTransdata(BaseIAppPayConfig config, String transid) {
		JSONObject json = new JSONObject(true);
//		json.put("tid", transid);
//		json.put("app", config.getAppId());
//		json.put("url_r", config.getPayFinishRedirectUrl());
//		json.put("url_h", config.getPayCancelRedirectUrl());
		
		json.put("transid", transid);
		json.put("redirecturl", config.getPayFinishRedirectUrl());
		json.put("cpurl", config.getPayCancelRedirectUrl());
		return json;
	}
	
	public RechargeTemplate getTemplate(Integer productId) {
		return support.getTemplate(productId);
	}
	
	public boolean offer(Recharge entity) {
		return support.offer(entity);
	}
	
	
}
